#include <iostream>
using namespace std;

#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>

/* 信号量定义 */
sem_t g_sem;

void printer(const char * str)
{
    /* 减一 */
    sem_wait(&g_sem);
    /* 加锁 */
    while(*str)
    {
        putchar(*str);
        fflush(stdout);
        str++;

        sleep(1);
    }
    /* 加一 */
    sem_post(&g_sem);
}

void * thread_fun1(void * arg)
{
    pthread_detach(pthread_self());

    const char * buf = "hello world";
    printer(buf);
    pthread_exit(NULL);

}
void * thread_fun2(void * arg)
{
    pthread_detach(pthread_self());

    const char * buf = "123456789";
    printer(buf);
    pthread_exit(NULL);
}

int main()
{
    sem_init(&g_sem, 0, 1);     //初始化为1， 第一个线程可以成功获取信号量。

    pthread_t tid1;
    pthread_create(&tid1, NULL, thread_fun1, NULL);

    pthread_t tid2;
    pthread_create(&tid2, NULL, thread_fun2, NULL);

    // 让主线程等待足够的时间
    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);

    int cnt = 69 * 8;
    while(cnt--)
    {
        sleep(1);
    }

    /* 释放信号量 */
    sem_destroy(&g_sem);

    return 0;
}